package br.com.sguc.manegedBean;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

import org.primefaces.event.FileUploadEvent;

import br.com.sguc.entidade.Anuncio;
import br.com.sguc.entidade.Usuario;
import br.com.sguc.interfaces.AnuncioRemote;
//import br.com.sguc.interfaces.UsuarioRemote;

@ManagedBean
@ViewScoped
public class AnuncioBean {

	@EJB
	private AnuncioRemote anuncioRemote;
	
	private Anuncio anuncio;
	
	private Anuncio anuncioPesquisa;

	private Anuncio anuncioSelecionado;
	
	private List<Anuncio> listAnuncios;

	private Usuario usuario;
	
	private String 	img;
	
	private boolean existe;

	/**
	 * Constructor
	 */
	public AnuncioBean() {
		super();
		this.anuncio = null;
		this.usuario = null;
		this.img = "default.png";
		this.existe = false;
		this.anuncioPesquisa = new Anuncio();
		this.anuncioPesquisa.setUsuario(new Usuario());
		this.listAnuncios = new ArrayList<>();
		this.anuncioSelecionado = new Anuncio();
		
		try {
			
			if (!FacesContext.getCurrentInstance().getExternalContext().getSessionMap().isEmpty()) {
				
				usuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("user");
				
				if (this.usuario == null) {
					
//				TODO redirecionar para a index fora do sistema
					
				}
				else {
					if (usuario.getPerfil().equalsIgnoreCase("EMPRESA")){
						
						anuncio = (Anuncio) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("anuncio");
						
						if(anuncio == null){
							
							this.anuncio = new Anuncio();
							this.anuncio.setImagem("default.png");
						}
						else{
							this.img = this.anuncio.getImagem();
							this.existe = true;
						}
					}
				}
				
				
			} else {
				
//			TODO redirecionar para a index fora do sistema
				
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}	
	
	/**
	 * Methods
	 */
		
	public void pesquisarAnuncio(){
		this.listAnuncios.clear();
		this.listAnuncios = this.anuncioRemote.listarAnuncios(anuncioPesquisa);
		
		if(this.listAnuncios.isEmpty() || this.listAnuncios == null){
			this.listAnuncios = new ArrayList<>();
		}
		
	}
	
	
	public void cancelarAnuncio(){
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("/SGUCWeb/pagina_sistema.jsf");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void cadastrarAnuncio(){
		
		//try {
		
			this.anuncio.setImagem(img);
			
			if(this.existe){
				
				this.anuncioRemote.salvar(anuncio);
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,	"Anuncio Alterado Com Sucesso", ""));
				
			}else{
				
				this.anuncio.setUsuario(usuario);
				this.anuncioRemote.cadastrarAnuncio(this.anuncio);
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,	"Anuncio Cadastrado Com Sucesso", ""));
			}
			
		// Redireciona para a tela de cadastro mostrando os campos todos vazios
			//FacesContext.getCurrentInstance().getExternalContext().redirect("/SGUCWeb/pagina_sistema.jsf");
			//FacesContext context = FacesContext.getCurrentInstance();
			//context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Cadastro realizado com sucesso", ""));

		/*} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
	}
	
	
	public void handleFileUpload(FileUploadEvent event) {
        try {
        	
        	String imagemName = "";
        	
        	ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance()
        			.getExternalContext().getContext();
        	
        	String path = servletContext.getRealPath("/resources/images/anuncios/");
        	File targetFolder = new File(path);
        	
        	InputStream inputStream = event.getFile().getInputstream();
        	
        	if(this.img.equalsIgnoreCase("Default.png")){
        		imagemName = this.usuario.getNomeFantasia()+ ".png";
        	}else if(this.img.equalsIgnoreCase(this.usuario.getNomeFantasia()+ ".png")){
        		imagemName = this.usuario.getNomeFantasia()+ "1.png";
        	}else{
        		imagemName = this.usuario.getNomeFantasia()+ ".png";
        	}
        	
        	OutputStream out = new FileOutputStream(new File(targetFolder, imagemName));
        	int read = 0;
        	byte[] bytes = new byte[1024];
        	
        	while ((read = inputStream.read(bytes)) != -1) {
        		out.write(bytes, 0, read);
        	}
        	inputStream.close();
        	out.flush();
        	out.close();
        	img = imagemName;

        } catch (IOException e) {
        	e.printStackTrace();
        }
    }
	
	/**
	 * Getters and Setters
	 */

	public Anuncio getAnuncio() {
		return anuncio;
	}


	public void setAnuncio(Anuncio anuncio) {
		this.anuncio = anuncio;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getImg() {
		return img;
	}

	public void setImg(String img) {
		this.img = img;
	}

	public Anuncio getAnuncioPesquisa() {
		return anuncioPesquisa;
	}

	public void setAnuncioPesquisa(Anuncio anuncioPesquisa) {
		this.anuncioPesquisa = anuncioPesquisa;
	}

	public boolean isExiste() {
		return existe;
	}

	public void setExiste(boolean existe) {
		this.existe = existe;
	}

	public List<Anuncio> getListAnuncios() {
		return listAnuncios;
	}

	public void setListAnuncios(List<Anuncio> listAnuncios) {
		this.listAnuncios = listAnuncios;
	}

	public Anuncio getAnuncioSelecionado() {
		System.out.println(this.anuncioSelecionado.getTituloAnuncio());
		return anuncioSelecionado;
	}

	public void setAnuncioSelecionado(Anuncio anuncioSelecionado) {
		this.anuncioSelecionado = anuncioSelecionado;
	}
	
}
